package com.dd.service;

import com.dd.pojo.query.UserFileQuery;
import com.dd.pojo.query.DeleteFileQuery;
import com.dd.pojo.query.DeleteFolderQuery;
import com.dd.pojo.entry.Folder;
import com.dd.pojo.entry.UserFoldFile;
import com.dd.pojo.vo.MergerFileVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.concurrent.Future;

public interface FileService  {







    /**
     *  创建文件夹
     * @param folderName 文件夹名称
     * @param userId 用户ID
     * @param  parentId 父文件夹ID
     */
    void mkdirFolDer(String folderName,String userId,String parentId);




    /**
     * 上传普通文件
     * @param file 文件
     * @param fileMa5 文件md5
     * @param userId 用户ID
     * @param folderId 文件夹ID
     */
    void upladFile(MultipartFile file,String fileMa5,String userId,String folderId);



    /**
     * 查询文件
     * @param userId
     * @param folderId
     * @return
     */
    List<UserFoldFile>findFiles(String userId, String folderId);


    /**
     * 查找文件夹
     * @param userID
     * @param  parentId
     * @return
     */
    List<Folder> findOneTypeFolder( String parentId,  String userID);


    /**
     * 获取当前文件夹信息
     * @param folderId
     * @return
     */
    Folder findFolderInfo(String folderId,String userId);

    /**
     * 删除文件
     * @param deleteFileParams
     */
    void deleteFile(DeleteFileQuery deleteFileParams);


    /**
     * 删除文件夹
     * @param deleteFolderParams
     */
    void deleteFolder(DeleteFolderQuery deleteFolderParams);


    /**
     * 检查文件是否上传
     * @param checks
     */
    int checkFileUplaodStatus(UserFileQuery checks);

    /**
     * 上传分片文件
     * @param fileChunkIndex 分片文件数组下标
     * @param fileMd5 文件md5
     * @param file 分片文件
     */
    void uploadChunk(String fileChunkIndex,String fileMd5,MultipartFile file);

    /**
     * 获取已经上传的分片数组
     * @param fileMd5
     * @return
     */
    List<Integer>findChunkd(String fileMd5);


    /**
     * 合并分片
     * @param vo
     * @param  uid 用户ID
     */
    void merger(MergerFileVO vo,String uid);

    Future<Integer> uploadFile(Integer index) throws InterruptedException;



}
